package com.zlc.platform.service;


import com.zlc.common.common.entity.PageVo;
import com.zlc.common.core.role.model.entity.MayanPlatRole;
import com.zlc.common.core.role.model.vo.MayanPlatDataRoleConfigVo;
import com.zlc.common.core.role.model.vo.MayanPlatRoleClassVo;
import com.zlc.common.core.role.model.vo.MayanPlatRoleUserVo;
import com.zlc.common.core.role.model.vo.MayanPlatRoleVo;
import com.zlc.common.core.user.model.vo.MayanPlatUserVo;
import com.zlc.common.model.resource.ResourceEntity;
import com.zlc.common.model.resource.ResourceRoleVo;
import com.zlc.common.model.role.DataRoleVo;
import com.zlc.common.model.role.RolePageRequest;
import com.zlc.common.model.role.RoleUserPageRequest;
import com.zlc.common.model.role.UserRoleVo;
import com.zlc.platform.model.RoleResourceEntity;

import java.util.List;

public interface RoleService {

    /**
     * 添加角色类别
     */
    void addRoleClass(MayanPlatRoleClassVo roleClassVo);


    /**
     * 修改角色类别
     */
    void updateRoleClass(MayanPlatRoleClassVo roleClassVo);

    /**
     * 删除角色类别
     */
    void deleteRoleClass(String id);


    /**
     * 查询所有角色类别
     */
    List<MayanPlatRoleClassVo> getList();


    /**
     * 通过角色类别查询所有角色，分页
     */
    PageVo<MayanPlatRole> getRoleList(RolePageRequest pageRequest);

    /**
     * 添加角色
     */
    void addRole(MayanPlatRoleVo roleVo);

    /**
     * 更新角色
     */
    void updateRole(MayanPlatRoleVo roleVo);

    /**
     * 删除角色
     */
    void removeRole(String id);


    /**
     * 查询角色关联的用户列表
     */
    PageVo<MayanPlatUserVo> getUserListByRoleCode(RoleUserPageRequest pageRequest);

    /**
     * 通过账号查询关联角色
     */
    List<UserRoleVo> getRoleByAccount(String account);


    /**
     * 角色关联用户
     */
    void relateUser(MayanPlatRoleUserVo userVo);

    /**
     * 角色关联用户
     */
    void relateUserList(List<MayanPlatRoleUserVo> userVos);


    /**
     * 删除角色关联用户 删除关联关系
     */
    void removeRelateUser(String relateId);


    /**
     * 删除角色关联用户 删除关联关系
     */
    void removeRelateUserList(List<String> relateIdList);


    /**
     * 通过角色查询关联资源
     */
    RoleResourceEntity queryRelateResource(String roleCode);



    /**
     * 保存全部关联资源  全删全增
     */
    void relateResource(ResourceRoleVo resourceRoleVo);


    /**
     * 保存角色数据权限配置
     */
    void saveRoleDataConfig(MayanPlatDataRoleConfigVo roleConfigVo);


    /**
     * 查询角色数据权限
     */
    MayanPlatDataRoleConfigVo queryDataRoleConfig(String roleCode);

    /**
     * 通过角色code查询用户数据权限
     */
    DataRoleVo queryDataRoleByAccount(List<String> roleCode);
}
